import logging
import allure
import jsonpath
from utils.send_request import send_jdbc_request


# 提取并不是每个http请求都会有的操作，所以我们还是将 allure.step() 放在函数内部。当确定该提取字段存在时，再将提取操作显示在报告中。
def json_extractor(case, all, res):
    if case["jsonExData"]:
        with allure.step("4.JSON提取"):
            for key, value in eval(case["jsonExData"]).items():  # 注意，case是字典，但字典的键值(如case["jsonExData"]指向的键值)是字符串，所以需要转化。
                value = jsonpath.jsonpath(res.json(), value)[0]  # 字典内的键名是字符串，而键值可以是字符串、列表、元组、字典等。此处键值应当是字符串。 # 把value重新赋值。
                all[key] = value
            logging.info(f"4.JSON提取，根据{case["jsonExData"]}提取数据，此时全局变量为：{all}")


def jdbc_extractor(case, all):
    if case["sqlExData"]:
        with allure.step("4.JDBC提取"):
            for key, value in eval(case["sqlExData"]).items():
                value = send_jdbc_request(value)  # 对value重新赋值。
                all[key] = value
            logging.info(f"4.JDBC提取，根据{case["sqlExData"]}提取数据，此时全局变量为：{all}")